package com.ctibook.booksystem.dao.bookcatalog;

import java.util.List;
import java.util.Map;

import com.cti.ftpservice.vo.PageViewVO;
import com.cti.ftpservice.vo.ParameterVo;
import com.ctibook.booksystem.model.bookcatalog.BookInfo;
import com.ctibook.booksystem.model.bookcatalog.BookInfoExtral;
import com.ctibook.booksystem.vo.bookcatalog.BookInfoVO;
import com.ctibook.booksystem.vo.bookcatalog.BookInfoViewVO;

/**
 * @author 鲁永刚 E-mail: luyg@ctibook.com
 * @version 创建时间：Sep 10, 2014 10:51:21 AM 书目Dao
 */
public interface BookInfoDao {
	/**
	 * 根据id查询书目
	 * 
	 * @param id
	 * @return
	 */
	public BookInfo getBookInfoById(String id);

	/**
	 * 根据isbn查询书目
	 * 
	 * @param isbn
	 * @return
	 */
	public BookInfo getBookInfoByIsbn(String isbn);
	/**
	 * 根据ISBN、状态查询书目
	 * @param isbn
	 * @param status
	 * @return
	 */
	public BookInfo getBookInfoByIsbnAndStatus(String isbn,String status);
	
	/**
	 * 添加或更新数据
	 * 
	 * @param bookInfo
	 */
	public void addOrUpdateBookInfo(BookInfo bookInfo);
	
	/**
	 * 添加书目VO对象
	 * @param vo
	 */
	public void addOrUpdateBookInfoVo(BookInfoVO vo);

	/**
	 * 删除书目
	 * 
	 * @param ids
	 */
	public void deleteBookInfo(BookInfo bookInfo);
	/**
	 * 判断书目信息是否存在
	 * @param isbn
	 * @return
	 */
	public int getBookInfoExistByIsbn(String isbn);

	/**
	 * 根据主题id获取数量
	 * 
	 * @param id
	 * @return
	 */
	public int getCountBySubjectId(String subjectId);

	/**
	 * 根据出版社id获取数量
	 * 
	 * @param publisherId
	 * @return
	 */
	public int getCountByPublisherId(String publisherId);

	public PageViewVO<BookInfoVO> getBookInfoVoPageView(int pageIndex,
			int pageSize);

	public BookInfoVO getBookInfoVoById(String id);
	
	public BookInfoViewVO getBookInfoViewVOById(String id);
	
	public BookInfoViewVO getBookInfoViewVOByIsbn(String isbn);

	public void deleteBookInfoVo(BookInfoVO vo);

	/**
	 * 获取所有的黑名单isbn
	 * @return
	 */
	public List<String> getAllBlackIsbns();
	
	/**
	 * 获取所有的白名单isbn
	 * @return
	 */
	public List<String> getAllWhiteIsbns();

	/**
	 * 获取没有图片的isbn号
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	public List<String> getNotImagesIsbns(int pageIndex, int pageSize);


	/**
	 * 根据isbn获取图片
	 * @param isbn
	 * @return
	 */
	public List<String> getBookImagePaths(String isbn);
	
	

	/**
	 *  获取没有缩略图的isbn号和首个图片
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	public Map<String, String> getNotThumbsImageIsbnAndFirstImages(
			int pageIndex, int pageSize);

	/**
	 * 根据isbn获取isbn及缩略图集合
	 * @param isbns
	 * @return
	 */
	public Map<String, String> getThumbsImagePathByIsbns(List<String> isbns);

	/**
	 * 获取订阅者该推送的书目
	 * @param subjectIds
	 * @param categoryIds
	 * @param subscripeUserId
	 * @param minBooksCount
	 * @return
	 */
	public List<BookInfo> getBooksBySubscripeUserInfo(List<String> subjectIds,
			List<String> categoryIds, String subscripeUserId, int minBooksCount);

	/**
	 * 获取生成专题目录的书目
	 * @param subjectIds
	 * @param maxResultSize
	 * @return
	 */
	public List<BookInfo> getBookInfoVosBySubjectIdsAndNotInSubjectBookListRecord(
			List<String> subjectIds, int maxResultSize);

	/**
	 * 获取生成类别目录的书目
	 * @param categoryIds
	 * @param maxResultSize
	 * @return
	 */
	public List<BookInfo> getBookInfoVosByCategoryIdsAndNotInCategoryBookListRecord(
			List<String> categoryIds, int maxResultSize);

	/**
	 * 获取生成月度目录的书目
	 * @param maxResultSize
	 * @return
	 */
	public List<BookInfo> getBookInfoVosByNotInMonthBookListRecord(
			int maxResultSize);

	/**
	 * 根据id集合获取所有的书目信息
	 * @param bookIds
	 * @return
	 */
	public List<BookInfo> getBookInfosByIds(List<String> bookIds);
	
	public List<String> getbookinfoIsbnByCategoryIdsAndPublisherYear(String[] categoryIds,Integer[] publisherYear,ParameterVo[] parameterVos);

	public PageViewVO<BookInfo> getBookInfoDetailsVoByCheckStatus(String[] checkStatus,String[] isbns,int pageIndex,int pageSize,String uploadUserId);

	public PageViewVO<BookInfo> getBlackBookInfo(String[] isbns,int pageIndex,int pageSize);
	
	public String getBookInfoTitleByIsbn(String isbn);
	
	public String getBookInfoPublisherNameByIsbn(String isbn);
	
	/**
	 * 多条件查询
	 * @param parameterVos
	 * @return
	 */
	public List<BookInfo> getbookInfosByMultiplyQuery(ParameterVo[] parameterVos);
	//根据属性查询Isbn
	public List<String> getIsbnByParameterVo(ParameterVo[] parameterVo);
	//根据类别ids查询Isbn
	public List<String> getIsbnsByCategoryIdsAndIsbns(String[] CategoryIds,String[] isbns);
    //根据书目id获取出版社id
	public String getPublisherIdByBookInfoId(String bookInfoId);
	
	//根据书目ID、类别级别获取类别信息
	public String getBookCategoryByBookInfoId(String bookInfoId,Integer level);

	public void updateBookInfoForSql(String exSql);
	
	public PageViewVO<BookInfo> getTopUnUpdatePriceBookInfoItems(int pageSize);
	
	/**
	 * 根据书目ISBN获取书目附加信息
	 * @param id
	 * @return
	 */
	public BookInfoExtral getBookInfoExtralByISBN(String ISBN);
	
	/**
	 * 根据id查询书目附加信息
	 * @param id
	 * @return
	 */
	public BookInfoExtral getBookInfoExtralById(String id);
	
	/**
	 * 添加和更新书目附加信息
	 * @param bookInfoExtral
	 */
	public void addOrUpdateBookInfoExtral(BookInfoExtral bookInfoExtral);
	
	/**
	 * 删除书目附加信息
	 * @param bookInfoExtral
	 */
	public void deleteBookInfoExtral(BookInfoExtral bookInfoExtral);

}
